///**
// * Definition for singly-linked list.
// * struct ListNode {
// *     int val;
// *     ListNode *next;
// *     ListNode() : val(0), next(nullptr) {}
// *     ListNode(int x) : val(x), next(nullptr) {}
// *     ListNode(int x, ListNode *next) : val(x), next(next) {}
// * };
// */
////////////////LeetCode 2. 两数相加
/////////////给你两个非空的链表，表示两个非负的整数。
/////////////它们每位数字都是按照 逆序 的方式存储的，并且每个节点只能存储 一位 数字。
/////////////请你将两个数相加，并以相同形式返回一个表示和的链表。
/////////////输入：l1 = [2,4,3], l2 = [5,6,4]
/////////////输出：[7, 0, 8]
/////////////解释：342 + 465 = 807.
//
/////////////输入：l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
/////////////输出：[8, 9, 9, 9, 0, 0, 0, 1]
/////////////你可以假设除了数字 0 之外，这两个数都不会以 0 开头。
//int getlen(ListNode* x)
//    {
//        int hh = 0;
//        while (x != nullptr)
//        {
//            hh++;
//            x = x->next;
//        }
//        return hh;
//    }
//    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
//        int len1 = getlen(l1);
//        int len2 = getlen(l2);
//        ListNode* ans = len1 > len2 ? l1 : l2;
//        ListNode* tmp = ans;
//        ListNode* prev = nullptr;
//        int carry = 0;
//        while (1)
//        {
//            int x = l1->val;
//            int y = l2->val;
//            tmp->val = (x + y + carry) % 10;
//            carry = (x + y + carry) / 10;
//            l1 = l1->next;
//            l2 = l2->next;
//            prev = tmp;
//            tmp = tmp->next;
//            if (l1 == nullptr || l2 == nullptr)
//                break;
//        }
//
//        while (tmp != nullptr)
//        {
//            int uh = tmp->val;
//            tmp->val = (uh + carry) % 10;
//            carry = (uh + carry) / 10;
//            prev = tmp;
//            tmp = tmp->next;
//        }
//        if (carry != 0)
//        {
//            ListNode* newt = new ListNode(carry);
//            prev->next = newt;
//        }
//        return ans;
//    }
